/**
  * 正则公用方法汇总
  */

module RegUtils {
	/* 
	用途：检查输入的Email信箱格式是否正确 
	输入：strEmail：字符串 
	返回：如果通过验证返回true,否则返回false 
	*/
	export function checkEmail(strEmail): boolean {
		//var emailReg = /^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$/; 
		var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
		if (emailReg.test(strEmail)) {
			return true;
		}
		else {
			alert("您输入的Email地址格式不正确！");
			return false;
		}
	};

	/*
	用途：校验ip地址的格式 
	输入：strIP：ip地址 
	返回：如果通过验证返回true,否则返回false； 
	*/


	export function isIP(strIP): boolean {
		if (isNull(strIP)) {
			return false;
		}
		var re = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正则表达式 
		if (re.test(strIP)) {
			if (Number(RegExp.$1) < 256 && Number(RegExp.$2) < 256 && Number(RegExp.$3) < 256 && Number(RegExp.$4) < 256) {
				return true;
			}
		}
		return false;
	};

	/* 
	用途：检查输入手机号码是否正确 
	输入：strMobile：字符串 
	返回：如果通过验证返回true,否则返回false 
	*/
	export function checkMobile(strMobile): boolean {
		var regu: string = "/^1[3|4|5|7|8][0-9]\d{4,8}$/";
		var re = new RegExp(regu);
		if (re.test(strMobile)) {
			return true;
		}
		else {
			return false;
		}
	};

	/* 
	用途：检查输入的电话号码格式是否正确 
	输入：strPhone：字符串 
	返回：如果通过验证返回true,否则返回false 
	*/
	export function checkPhone(strPhone): boolean {
		var phoneRegWithArea = /^[0][1-9]{2,3}-[0-9]{5,10}$/;
		var phoneRegNoArea = /^[1-9]{1}[0-9]{5,8}$/;
		var prompt = "您输入的电话号码不正确!";
		if (strPhone.length > 9) {
			if (phoneRegWithArea.test(strPhone)) {
				return true;
			}
			else {
				alert(prompt);
				return false;
			}
		}
		else {
			if (phoneRegNoArea.test(strPhone)) {
				return true;
			}
			else {
				alert(prompt);
				return false;
			}
		}
	};
	//Description:  银行卡号Luhm校验
	//Luhm校验规则：16位银行卡号（19位通用）:
	// 1.将未带校验位的 15（或18）位卡号从右依次编号 1 到 15（18），位于奇数位号上的数字乘以 2。
	// 2.将奇位乘积的个十位全部相加，再加上所有偶数位上的数字。
	// 3.将加法和加上校验位能被 10 整除。
	//方法步骤很清晰，易理解，需要在页面引用Jquery.js   

	//bankno为银行卡号 banknoInfo为显示提示信息的DIV或其他控件
	export function luhmCheck(bankno) {
		var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位（与luhm进行比较）
		var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
		var newArr = new Array();
		for (var i = first15Num.length - 1; i > -1; i--) { //前15或18位倒序存进数组
			newArr.push(first15Num.substr(i, 1));
		}
		var arrJiShu = new Array(); //奇数位*2的积 <9
		var arrJiShu2 = new Array(); //奇数位*2的积 >9
		var arrOuShu = new Array(); //偶数位数组
		for (var j = 0; j < newArr.length; j++) {
			if ((j + 1) % 2 == 1) { //奇数位
				if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
				else arrJiShu2.push(parseInt(newArr[j]) * 2);
			} else //偶数位
				arrOuShu.push(newArr[j]);
		}

		var jishu_child1 = new Array(); //奇数位*2 >9 的分割之后的数组个位数
		var jishu_child2 = new Array(); //奇数位*2 >9 的分割之后的数组十位数
		for (var h = 0; h < arrJiShu2.length; h++) {
			jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
			jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
		}

		var sumJiShu = 0; //奇数位*2 < 9 的数组之和
		var sumOuShu = 0; //偶数位数组之和
		var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
		var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
		var sumTotal = 0;
		for (var m = 0; m < arrJiShu.length; m++) {
			sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
		}

		for (var n = 0; n < arrOuShu.length; n++) {
			sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
		}

		for (var p = 0; p < jishu_child1.length; p++) {
			sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
			sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
		}
		//计算总和
		sumTotal = sumJiShu + sumOuShu + sumJiShuChild1 + sumJiShuChild2;

		//计算Luhm值
		var k = sumTotal % 10 == 0 ? 10 : sumTotal % 10;
		var luhm = 10 - k;
		if (lastNum == luhm) {
			return true;
		} else {
			return false;
		}
	}
	/* 
	用途：检查输入字符串是否为空或者全部都是空格 
	输入：str 
	返回：如果全是空返回true,否则返回false 
	*/
	export function isNull(str): boolean {
		if (str == "") {
			return true;
		}
		var regu = "^[ ]+$";
		var re = new RegExp(regu);
		return re.test(str);
	};

	/* 
	用途：检查输入对象的值是否符合整数格式 
	输入：str 输入的字符串 
	返回：如果通过验证返回true,否则返回false 
	*/
	export function isInteger(str): boolean {
		var regu = /^[-]{0,1}[0-9]{1,}$/;
		return regu.test(str);
	};

	/* 
	用途：检查输入字符串是否符合正整数格式 
	输入：s：字符串 
	返回：如果通过验证返回true,否则返回false 
	*/
	export function isNumber(s): boolean {
		var regu = "^[0-9]+$";
		var re = new RegExp(regu);
		if (s.search(re) != - 1) {
			return true;
		}
		else {
			return false;
		}
	};

	/* 
	用途：检查输入字符串是否符合金额格式,格式定义为带小数的正数，小数点后最多2位 
	输入：s：字符串 
	返回：如果通过验证返回true,否则返回false 
	*/
	export function isMoney(s): boolean {
		var regu = "^[0-9]+[\.][0-9]{0,2}$";
		var re = new RegExp(regu);
		if (re.test(s)) {
			return true;
		}
		else {
			return false;
		}
	};
	export function isZhengShu(s): boolean {
		var reg = /^\d+(?=\.{0,1}\d+$|$)/
		if (reg.test(s)) return true;
		return false;
	}

	/*
	function:cTrim(sInputString,iType) 
	description:字符串去空格的函数 
	parameters:iType：1=去掉字符串左边的空格;2=去掉字符串左边的空格;0=去掉字符串左边和右边的空格 
	return value:去掉空格的字符串 
	*/
	export function cTrim(sInputString, iType): boolean {
		var sTmpStr = ' ';
		var i = - 1;
		if (iType == 0 || iType == 1) {
			while (sTmpStr == ' ') {
				++i;
				sTmpStr = sInputString.substr(i, 1);
			}
			sInputString = sInputString.substring(i);
		}
		if (iType == 0 || iType == 2) {
			sTmpStr = ' ';
			i = sInputString.length;
			while (sTmpStr == ' ') {
				--i;
				sTmpStr = sInputString.substr(i, 1);
			}
			sInputString = sInputString.substring(0, i + 1);
		}
		return sInputString;
	}
}